package com.lnt.mq.rabbitmq.topic;

import com.lnt.mq.rabbitmq.util.RabbitConstant;
import com.lnt.mq.rabbitmq.util.RabbitUtil;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;

import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.concurrent.TimeoutException;

/**
 * 通配符模式
 * 一份数据特定多方共享,与路由模式区别在于1,客户端不需要全词key去多重绑定,只需要使用通配符进行范围key就可以，2,交换机类型为topic,
 * 适用于天气预报推送等一份数据分享给应用商这种广播性质工作场景
 * 这里扮演发布者的行为,发布时需要提交路由key
 */
public class WeatherBureau {

    public static void main(String[] args) throws IOException, TimeoutException {

        Map<String, String> map = new HashMap<>();
        map.put("china.hunan.changsha.20220104", "中国湖南长沙20220104天气数据");
        map.put("china.hunan.changsha.20220105", "中国湖南长沙20220105天气数据");
        map.put("china.hunan.zhuzhou.20220104", "中国湖南株洲20220104天气数据");
        map.put("china.hubei.wuhan.20220104", "中国湖北武汉20220104天气数据");
        map.put("china.hubei.wuhan.20220105", "中国湖北武汉20220105天气数据");
        map.put("china.hebei.shijiazhuang.20220105", "中国河北石家庄20220105天气数据");
        map.put("china.henan.zhengzhou.20220105", "中国河南郑州20220105天气数据");
        map.put("us.cal.lsj.20220104", "美国加州洛杉矶20220104天气数据");
        map.put("us.cal.lsj.20220105", "美国加州洛杉矶20220105天气数据");
        Connection connection = RabbitUtil.getConnection();

        Channel channel = connection.createChannel();

        Iterator<Map.Entry<String, String>> iterator = map.entrySet().iterator();
        while (iterator.hasNext()){
            Map.Entry<String, String> next = iterator.next();
            // param1: 交换机名称
            // param2: 消息key,作为路由key
            //....
            channel.basicPublish(RabbitConstant.EXCHANGE_WEATHER_TOPIC, next.getKey(), null, next.getValue().getBytes());
        }


        channel.close();
        connection.close();
    }
}
